#include "recbox.h"
#include "ui_recbox.h"
#include<recboxitem.h>
#include<math.h>
//事件过滤器，用于处理所有的事件


RecBox::RecBox(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecBox),
    row(1),
    col(4)
{
    ui->setupUi(this);

}

RecBox::~RecBox()
{
    delete ui;
}
void RecBox::createRecBoxItem()
{
    //每次点击前一页和后一页后，当前页面的元素并没有做处理，就会出现一个页面的大小两个页面的元素
    //所以需要在点击上一页或下一页时将当前的元素删除
    //查找 ui->recListUp 中所有类型为 RecBoxItem* 的子部件，并将它们存储在一个 QList 中。
   QList<RecBoxItem*> recUpList = ui->RecListUp->findChildren<RecBoxItem*>();
   for(auto e:recUpList)
   {
       //在ui界面中移除掉RecBoxItem部件，就是当前所显示的元素
       ui->recListUpHLayout->removeWidget(e);
   }

   QList<RecBoxItem*> recDownList = ui->RecListDown->findChildren<RecBoxItem*>();
   for(auto e:recDownList)
   {
       //在ui界面中移除掉RecBoxItem部件，就是当前所显示的元素
       ui->recListDownHLayout->removeWidget(e);
   }
   int index=0;
   //currentIndex 是当前页面的索引，col 是每页的列数
   //循环的范围是 [currentIndex * col, currentIndex * col + col)，即当前页面的数据范围
   for(int i = currentIndex*col; i < col + currentIndex*col; ++i)
   {
       RecBoxItem* item = new RecBoxItem();
       //设置音乐图片与对应文本
       QJsonObject obj = imageList[i].toObject();
       item->setRecText(obj.value("text").toString());
       item->setRecImage(obj.value("path").toString());
       ui->recListUpHLayout->addWidget(item);
       //默认row=2，col=8
       //这里的今日为你推荐是一行四列，所以说无论如何都只会走else
       //音乐补给站是两行四列，当i=5时，i就大于col/2，这时刚好也打印第二行，if语句成立，则会正常打印
       if(index >= col/2 && row == 2)
       {
            ui->recListDownHLayout->addWidget(item);
       }
       else
       {
            ui->recListUpHLayout->addWidget(item);
       }
       ++index;
   }
}

void RecBox::initRecBoxUi(QJsonArray data, int row)
{
    if(row==2)
    {
        this->row=row;
        this->col=8;
    }
    else
    {
        ui->RecListDown->hide();
    }
    imageList=data;
    //标记当前显示第0组
    currentIndex=0;
    //总共有几张照片ceil表示向上取整
    count=ceil(imageList.size()/col);
    createRecBoxItem();
}



void RecBox::on_btUp_clicked()
{
    //向前翻页，如果翻到最后一页了就从最开头开始
    currentIndex--;
    if(currentIndex<0)
    {
        currentIndex=0;
    }
    createRecBoxItem();
}

void RecBox::on_btDown_clicked()
{
    //向后翻页，如果翻到最后一页了就从最开头开始
    currentIndex++;
    if(currentIndex>count)
    {
        currentIndex=0;
    }
    createRecBoxItem();
}
